package com.app.bimo.library_db.helper;


import com.app.bimo.library_db.FontTypeData;
import com.app.bimo.library_db.dao.DaoSession;
import com.app.bimo.library_db.dao.FontTypeDataDao;

import java.util.List;

import io.reactivex.Observable;

public class FontHelper {

    private static volatile FontHelper sInstance;
    private static DaoSession daoSession;
    private static FontTypeDataDao fontTypeDataDao;

    public static FontHelper getsInstance() {
        if (sInstance == null) {
            synchronized (FontHelper.class) {
                if (sInstance == null) {
                    sInstance = new FontHelper();
                    daoSession = DaoDbHelper.getInstance().getSession();
                    fontTypeDataDao = daoSession.getFontTypeDataDao();
                }
            }
        }
        return sInstance;
    }

    /**
     * 保存字体
     *
     * @param list
     */
    public void saveFonts(List<FontTypeData> list) {
        fontTypeDataDao.insertOrReplaceInTx(list);
    }


    /**
     * 更新一条数据状态
     *
     * @param fontTypeData
     */
    public void updateFont(FontTypeData fontTypeData) {
        fontTypeDataDao.update(fontTypeData);
    }

    /**
     * 更新多条
     *
     * @param fonts
     */
    public void updateFonts(List<FontTypeData> fonts) {
        List<FontTypeData> list = fontTypeDataDao.queryBuilder().orderAsc(FontTypeDataDao.Properties.Type).list();
        for (int i = 0; i < list.size(); i++) {
            FontTypeData daoData = list.get(i + 1);
            FontTypeData netData = fonts.get(i);
            if (list.indexOf(fonts.get(i)) != -1) {
                if (daoData.getType() == netData.getType()) {
                    netData.setStatus(daoData.getStatus());
                }
                fontTypeDataDao.update(netData);
            } else {
                fontTypeDataDao.save(netData);
            }
        }

    }

    /**
     * 删除用户
     */
    public void delFont(FontTypeData fontTypeData) {
        fontTypeDataDao.delete(fontTypeData);
    }

    /**
     * 删除用户
     */
    public void delAllFont() {
        fontTypeDataDao.deleteAll();
    }

    /**
     * 根据用户名查询用户信息
     *
     * @param id
     * @return
     */
    public FontTypeData findFontId(String id) {
        return fontTypeDataDao.queryBuilder().where(FontTypeDataDao.Properties.Id.eq(id)).unique() != null
                ? fontTypeDataDao.queryBuilder().where(FontTypeDataDao.Properties.Id.eq(id)).unique() : null;
    }

    /**
     * 查询本地全部字体
     *
     * @return
     */
    public List<FontTypeData> findAllFont() {
        return fontTypeDataDao.queryBuilder().list();
    }

    /**
     * 查询本地全部字体
     *
     * @return
     */
    public List<FontTypeData> findAllFontOrderByType() {
        return fontTypeDataDao.queryBuilder().orderAsc(FontTypeDataDao.Properties.Type).list();
    }

    /**
     * 已使用
     *
     * @return
     */
    public FontTypeData findUsedFontStatus() {
        return fontTypeDataDao.queryBuilder().where(FontTypeDataDao.Properties.Status.eq(3)).unique();
    }

    public Observable<List<FontTypeData>> localObservable() {
        return Observable.just(findFonts());
    }

    /**
     * 查询用户信息
     *
     * @return
     */
    private List<FontTypeData> findFonts() {
        return fontTypeDataDao.queryBuilder().list();
    }

}
